package com.model.single;

/**
 * @author Pretty·Boy
 * @version 1.0
 * @desc: 单例模式之懒汉式（双重校验锁法）
 * @date 2018/10/12 21:26
 */
public class SingletonLazy {
    /**
     * 构造方法私有化
     */
    private SingletonLazy() {

    }

    /**
     * 初始化对象为null
     *  volatile 关键字，修饰的成员变量，保证了，在一个写操作完成之前
     *  不会调用读操作
     */

    private volatile static SingletonLazy singletonLazy = null;

    /**
     * 对外提供公共的访问方式
     */
    public static SingletonLazy getInstance() {

        //此if提高运行效率
        if (singletonLazy == null) {

            //添加同步锁
            synchronized (SingletonLazy.class) {
                //此if不能够省略掉
                if (singletonLazy == null) {
                    singletonLazy = new SingletonLazy();
                }
            }
        }
        return singletonLazy;
    }


}
